package com.internetCafes.spms.web.customer.mapper.area;

import com.baomidou.mybatisplus.annotation.SqlParser;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.internetCafes.spms.core.annotation.NoTentant;
import com.internetCafes.spms.web.customer.entity.area.Area;
import com.internetCafes.spms.web.customer.model.area.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 区域表 Mapper 接口
 * </p>
 *
 * @author Zj
 * @since 2021-10-18
 */
@Mapper
public interface AreaMapper extends BaseMapper<Area> {

    /**
     * 获取区域列表
     *
     * @param areaDo 请求参数
     * @return 区域列表
     */
    List<EntAreaPo> listPo(@Param("areaDo") EntAreaDo areaDo);

    /**
     * 根据管理员id 列表获取 区域信息
     *
     * @param managerIdList 管理员id列表
     * @return 区域信息列表
     */
    List<EntAreaManagerPo> getAreaInfoByManagerIdList(@Param("managerIdList") List<Long> managerIdList);

    /**
     * 区域名单-区域方向
     *
     * @param areaId 区域id
     * @return 区域信息
     */
    EntAreaDetailPo getAreaDetailForSaleByAreaId(@Param("areaId") Long areaId);

    /**
     * 区域名单-区域方向
     *
     * @param areaDetailDo 请求参数
     * @return 区域信息
     */
    List<EntAreaDetailPo> listAreaDetailForSale(@Param("areaDetailDo") EntAreaDetailDo areaDetailDo);

    /**
     * 区域详情列表
     *
     * @param areaDetailDo 请求参数
     * @return 区域详情列表
     */
    List<EntAreaDetailPo> listAreaDetailForManager(@Param("areaDetailDo") EntAreaDetailDo areaDetailDo);

    /**
     * 获取用户管理或者销售的区域
     *
     * @param responsibleDo 请求参数
     * @return 区域列表
     * @author Zj
     */
    List<Area> listManagerOrSaleResponsible(@Param("responsibleDo") AreaManagerOrSaleResponsibleDo responsibleDo);

    /**
     * 提供给定时器获取
     */
    @SqlParser(filter = true)
    @NoTentant
    List<Area> listNoTenantId(@Param("ew") Wrapper<Area> queryWrapper);

    /**
     * 根据条件获取区域列表
     *
     * @param areaDo 自定义请求参数
     * @return 区域信息列表
     */
    List<EntAreaPo> poList(@Param("areaDo") EntAreaDo areaDo);

    /**
     * 区域名单管理-列表-区域角度
     */
    List<EntAreaUserPagingPo> entAreaUserPoList(@Param("req") EntAreaUserPagingReq req);

    /**
     * 销售区域列表
     */
    List<EntSaleAreaListPo> saleAreaListPo(@Param("saleAreaListDo") EntSaleAreaListDo saleAreaListDo);

    /**
     * 区域名单管理-详情-区域角度
     */
    EntAreaUserDetailPo entAreaUserPoDetail(Long id);

    /**
     * 区域名单管理-分页-区域角度
     */
    Page<EntAreaUserPagingPo> entAreaUserPoPaging(Page<Area> page, @Param("req") EntAreaUserPagingReq req);

    /**
     * 区域管理分页
     */
    Page<EntAreaPagingPo> entAreaPoPaging(Page<Area> page, @Param("ew") Wrapper<Area> queryWrapper);
}
